package proto

import (
	"regexp"
	"time"
	D "websocket_apn/define"
	"websocket_apn/log"
)

/*
71 AB 00 00 0E 75 00 00 1B 6C 00 00 02D4 07 01 81 E2 08 00 10 00 18 00
22 3D 0A 16 08 EC DA FC 6A 10 B5 95 BA C3 86 32 18 D8 04 20 EE EC 08 28 E7 04 12 1F 08 FE F8 9E B6 C0 5A 12 0B E9 80 8D E9 81 A5 E4 B8 B6 53 4B 18 B6 E5 08 20 E7 04 28 EE EC 08 18 05 20 00
22 40 0A 16 08 95 FB EE 6A 10 E8 F3 D2 B9 86 32 18 D8 04 20 EE EC 08 28 8F 05 12 22 08 BA BF E7 B8 C0 5A 12 0E E8 8A B1 E7 81 AB C2 B7 E5 90 9B E5 90 9B 18 B6 E5 08 20 94 05 28 EE EC 08 18 05 20 00
22 41 0A 16 08 BE C7 E6 6A 10 B4 E5 AE B7 86 32 18 D8 04 20 EE EC 08 28 A4 05 12 23 08 FC C3 8E B6 C0 5A 12 0F E5 8D 83 E5 AF BB E8 82 A5 E5 AE 85 E6 B0 B4 18 91 E5 08 20 A5 05 28 EF EC 08 18 05 20 00
22 41 0A 16 08 8C E5 85 6B 10 D9 BE B6 CB 86 32 18 D8 04 20 ED EC 08 28 E5 04 12 23 08 A0 A9 F2 B9C0 5A 12 0F E4 B9 9D E7 81 B5 E3 80 81 E6 BD 87 E6 B4 92 18 B4 E5 08 20 E7 04 28 ED EC 08 18 05 20 00
22 44 0A 16 08 D5 8D 80 6B 10 FB C0 F4 BF 86 32 18 C0 04 20 EE EC 08 28 A8 04 12 26 08 9C A9 D8 B9 C0 5A 12 12 E4 B9 9D E7 81 B5 E380 81 E4 BD A0 E4 B8 AA E6 AF 9B 18 B4 E5 08 20 AA 04 28 EE EC 08 18 05 20 00
22 41 0A 16 08 F8 C5 82 6B 10 B3 CB E7 BE 86 32 18 C0 04 20 ED EC 08 28 A7 04 12 23 08 C0 90 C5 B9 C0 5A 12 0F E6 98 9F E8 BE B0 E2 9C A8 E9 95 BF E6 AD 8C 18 B4E5 08 20 A7 04 28 ED EC 08 18 05 20 00 22 3F 0A 16 08 DF A2 F6 6A 10 E1 A9 D7 BD 86 32 18 8D 04 20 F2 EC 08 28 A2 05 12 21 08 90 B3 B8 B6 C0 5A 12 0F E9 80 8D E9 81 A5 E4 B8 B6 E8 8B A5 E8 8B A5 18 91 E5 08 20 A4 05 28 00 18 05 20 00 22 440A 16 08 A6 DE 85 6B 10 92 A0 C4 C4 86 32 18 F8 03 20 F2 EC 08 28 F9 03 12 26 08 CD BE BC B9 C0 5A 12 12 E6 98 9F E8 BE B0 E2 9C A8 E5 B1 B1 E5 B1 BF E6 B5 B7 18 AA E5 08 20 F9 03 28 F2 EC 08 18 05 20 00 22 41 0A 16 08 C2 CA 85 6B 10 93 BABA C4 86 32 18 B0 03 20 F7 EC 08 28 A5 04 12 23 08 EA A8 94 B7 C0 5A 12 0F E6 98 9F E6 B2 B3 E5 B0 8F E6 9D 82 E9 B1 BC 18 B4 E5 08 20 A9 04 28 F7 EC 08 18 05 20 00 22 41 0A 16 08 B4 AD FE 6A 10 98 BB 98 BE 86 32 18 B0 03 20 F7 EC 08 28 A5 04 12 23 08 BB 87 88 B6 C0 5A 12 0F E5 A5 94 E6 94 BE E7 9A 84 E9 BC BB E6 AF 9B 18 AB E5 08 20 A5 04 28 F7 EC 08 18 05 20 00 22 3C 0A 14 08 ABB6 F3 6A 10 AF B2 DE BB 86 32 18 F7 02 20 00 28 95 05 12 20 08 B1 CE 85 B9 C0 5A 12 0E E8 8A B1 E7 81 AB C2 B7 E7 8B 90 E7 8B B8 18 AC E5 08 20 96 05 28 00 18 05 20 00 22 3A 0A 14 08 E8 BA FD 6A 10 D7 8D A9 BD 86 32 18 E8 02 20 00 28 E2 0312 1E 08 D7 9E D4 BA C0 5A 12 0C E9 A6 A8 E6 9C 89 E6 89 80 E5 B1 9E 18 B5 E5 08 20 E2 03 28 00 18 05 20 00 22 3D 0A 14 08 F7 98 83 6B 10 F7 9F F7 BB 86 32 18 E8 02 20 00 28 E1 03 12 21 08 84 D5 99 B8 C0 5A 12 0F E5 A8 81 E6 AD A6 E5 A4 A7E5 B0 86 E5 86 9B 18 DE C9 08 20 E1 03 28 00 18 05 20 00 22 40 0A 14 08 ED DE 84 6B 10 DC 9A FE C3 86 32 18 E8 02 20 00 28 F6 03 12 24 08 A3 A6 A4 BB C0 5A 12 12 E5 A4 A9 E5 91 BD E1 83 A6 E4 BB 99 E1 AD 84 E0 BF 90 18 AB E5 08 20 F6 03 2800 18 05 20 00 22 40 0A 14 08 B0 CE 85 6B 10 A6 C3 CD BD 86 32 18 E8 02 20 00 28 DB 03 12 24 08 D4 C8 A2 BB C0 5A 12 12 E5 A4 A9 E5 91 BD E3 80 81 E5 B9 B2 E9 A5 AD E9 A5 AD 18 B5 E5 08 20 DC 03 28 00 18 05 20 00 22 3D 0A 14 08 EF FC 83 6B 10 D6 8D 82 C0 86 32 18 E8 02 20 00 28 C9 03 12 21 08 9C 9D E4 B5 C0 5A 12 0F E5 A5 94 E6 94 BE E7 9A 84 E5 B0 8F E9 B8 A1 18 B5 E5 08 20 CB 0328 00 18 05 20 00 22 3D 0A 14 08 F2 93 F7 6A 10 CA 92 C0 B7 86 32 18 E8 02 20 00 28 D3 03 12 21 08 82 D6 B6 B9 C0 5A 12 0F E6 98 9F E8 BE B0 E2 9C A8 E6 97 A0 E6 95 8C 18 A0 E5 08 20 D4 03 28 00 18 05 20 00 22 39 0A 14 08 85 D3 FD 6A 10 94DC C0 BD 86 32 18 E8 02 20 00 28 EE 03 12 1D 08 8A D7 9D B8 C0 5A 12 0B E8 AF 9B E4 BB 99 2D F0 9F 90 9F 18 B5 E5 08 20 F2 03 28 00 18 05 20 00 22 3A 0A 14 08 B2 B0 85 6B 10 D1 FE AC C4 86 32 18 E8 02 20 00 28 85 04 12 1E 08 A7 CB 8D B7 C05A 12 0C E6 98 9F E6 B2 B3 E5 B0 8F E7 BE 8A 18 9E E5 08 20 86 04 28 00 18 05 20 00 22 3E 0A 14 08 88 B0 FA 6A 10 B7 FD B3 BA 86 32 18 E8 02 20 00 28 D3 03 12 22 08 BD C8 F3 B4 C0 5A 12 10 E9 81 93 E8 A1 8D F0 9F 8D 83 E5 A4 A9 E5 B0 8A 18C2 CA 08 20 D5 03 28 00 18 05 20 00
22 3D 0A 14 08 F9 B7 FC 6A 10 87 F9 A9 BC 86 32 18 E8 02 20 00 28 BB 04 12 21 08 98 84 8F B7 C0 5A 12 0F E6 98 9F E6 B2 B3 E4 BA 8C E5 B8 88 E5 85 84 18 9C E5 08 20 BE 04 28 00 18 05 20 00
22 3B 0A 14 08 F3 F5 F7 6A 10 BF C6 90 B8 86 32 18 E8 02 20 00 28 CE 03 12 1F 08 CA D3 DD B5 C0 5A 12 0D E5 A5 94 E6 94 BE E7 9A 84 F0 9F A5 A6 18 AA E5 08 20D0 03 28 00 18 05 20 00
22 3D 0A 14 08 E8 CA 81 6B 10 C4 A5 C4 BA 86 32 18 D9 02 20 00 28 A6 03 12 21 08 DA DC D8 BA C0 5A 12 0F E6 99 81 E5 A4 9C E7 A7 80 E9 81 93 E4 BA BA 18 B5 E5 08 20 A6 03 28 00 18 05 20 00
22 3D 0A 14 08 F1 CA FE 6A 10 EB D8 C5 B7 86 32 18 D9 02 20 00 28 B4 03 12 21 08 FE B8 EC B7 C0 5A 12 0F E4 B8 BE E9 85 92 E9 97 AE E9 9D 92 E5 A4 A9 18 B5 E5 08 20 B4 03 28 00 18 05 20 00
*/

func ParaJuLingZhenInfo(dataBytes []byte) []D.JuLingZhenInfo {
	var allInfo []D.JuLingZhenInfo
	data := BytesToHexStr(dataBytes)
	// 定义正则表达式
	// 																	1 灵阵ID			  2 灵阵到期时间			3 灵气/分								            4 	用户ID							    5 Name										                6  Num
	re := regexp.MustCompile(`22[0-9a-fA-F]{2}0A[0-9a-fA-F]{2}08([0-9a-fA-F]{8,10})10([0-9a-fA-F]{12})18([0-9a-fA-F]{4})(?:[0-9a-fA-F]{2})+?12[0-9a-fA-F]{2}08([0-9a-fA-F]{12})12[0-9a-fA-F]{2}((?:[0-9a-fA-F]{2})+?)18[0-9a-fA-F]{4}0820(?:[0-9a-fA-F]{2})+?18(0[1-5])2000`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	currentTime := time.Now()
	// 打印结果
	for _, regRes := range res {
		if len(regRes) > 4 {
			//log.Infof("%+v", regRes[1:])
			millis := ParaIntDataByHexStr(regRes[2])
			nameByte, _ := HexStrToBytes(regRes[5])
			info := D.JuLingZhenInfo{
				YmID:   "",                                            //妖盟ID
				Title:  0,                                             //是否有称号 F9 F7
				IsSelf: false,                                         //是否是自己的灵阵
				LzID:   regRes[1],                                     //灵阵ID
				Time:   time.Unix(millis/1000, (millis%1000)*1000000), //到期时间
				LinQ:   int(ParaIntDataByHexStr(regRes[3])),           //灵气速度
				ID:     regRes[4],                                     //用户ID
				Name:   string(nameByte),                              //灵阵名字
				Num:    OneByteHexStrToByte(regRes[6]),                //已入阵人数
			}

			info.AllLinQ = int64(info.Time.Sub(currentTime).Minutes())
			allInfo = append(allInfo, info)
			//log.Infof("灵阵%s【%s】:%s,已入阵[%d]人", info.LzID, info.ID, info.Name, info.Num)
		}
	}
	return allInfo
}

/*
71 AB 00 00 00 4B 00 00 1B 59 00 00 02D4 07 01 81 E2 08 00 18 B6 01 20 A5 E6 BD 01 20 A6 E6 BD 01 20 A7 E6 BD 01 20 A8 E6 BD 01 20 A9 E6 BD 01 20 AA E6 BD 01 20 AB E6 BD 01 20 AC E6 BD 01 2A 0A 08 00 10 00 18 00 28 01 38 00
*/
func ParaJuLingZhenLingQiInfo(dataBytes []byte) D.JuLingZhenLingQiInfo {
	info := D.JuLingZhenLingQiInfo{}
	if dataBytes[0] != 0x80 && dataBytes[1] != 0x00 {
		return info
	}
	data := BytesToHexStr(dataBytes)
	// 定义正则表达式
	re := regexp.MustCompile(`18(([0-9a-fA-F]{2})+?)20`)
	regRes := re.FindAllStringSubmatch(data, -1)
	if len(regRes) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	if len(regRes) > 0 && len(regRes[0]) > 1 {
		log.Debugf("%d-%s", len(dataBytes), regRes[0])
		info.ID = regRes[0][1]
	}
	return info
}
